#include "oslib/types.h"
#include "oslib/os.h"

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#ifndef TRUE
#define TRUE                  (1)
#endif
#ifndef FALSE
#define FALSE                 (0)
#endif

typedef struct _MemFile
{
  char                        *pcMemory;
  int                         nSize;
  int                         nPos;
  char                        cMode;
  char                        szFilename[1024];
} MemFile;

void SaveSection (FILE * pfhFile, char * szSection);
void SaveSectionMem (MemFile * pfhFile, char * szSection);
void SaveDetail (FILE * pfhFile, char * szName, char * szDetails);
void SaveDetailMem (MemFile * pfhFile, char * szName, char * szDetails);
MemFile * memopen (char * filename, char * mode);

int FindSection (FILE * pfhFile, char * szSection);
int FindSectionMem (MemFile * pfhFile, char * szSection);
bool FindValue (FILE * pfhFile, int nSection, char * szName, char * szValue, int nValueLen);
bool FindValueMem (MemFile * pfhFile, int nSection, char * szName, char * szValue, int nValueLen);

MemFile * memopen (char * filename, char * mode);
int memclose (MemFile * psMemFile);
char * memgets (char * str, int n, MemFile * psMemory);
int memseek (MemFile * psMemory, int pos, int from);
int memtell (MemFile * psMemory);
int memputc (int c, MemFile * psMemory);
int memputs (char * str, MemFile * psMemory);

int LoadFileFlex (char * szFilename, char * * ppcMemory, int * pnSize);
void HexToString (char * szPlainText, int * anBuffer, int nBufferLen);
void StringToHex (char * szPlainText, int * anBuffer, int nBufferLen);

MemFile * memcreate (char * * ppcMem, int nSize, char * mode);
char * * meminfo (MemFile * psMemFile, int * pnPos);

